#ifndef GRAPHINTERFACE_H
#define GRAPHINTERFACE_H

#include <cstdlib>
#include <vector>
#include <iostream>
#include <fstream>
#include <cstring>
#include <sstream>


typedef std::vector<std::vector<int> > int_vect_vect;

class GraphInterface
{
 public:
  virtual int getSize() const = 0;
  virtual bool hasNoEdge() = 0; //abstract method

  virtual std::vector<int> neighbours(int vertex) const = 0;
  virtual int_vect_vect getAdjencyList()const = 0;
  virtual int degre(int vertex) const = 0;

  virtual int addVertex() = 0;
  virtual int addVertex(int vertex) = 0;

  virtual void addEdge(int vertex1, int vertex2) = 0;
  virtual void delEdge(int vertex1, int vertex2) = 0;
  virtual void delEdgeFromVertex(int vertex) = 0;
  virtual bool isEdge(int vertex1, int vertex2) = 0;

  virtual std::string toString() = 0;
  virtual void printGraph() = 0;  
  //vector<int> AbstractGraph::operator[](int i) const=0;
  //ostream& operator<<(std::ostream &os,const AbstractGraph& g)=0;
 
  virtual void readFile(std::string path) = 0;
  virtual void writeFile(std::string path) = 0;

};

#endif // GRAPHINTERFACE_H
